#ifndef DAEMONCONTROLLER_H
#define DAEMONCONTROLLER_H

#include <string>
#include <map>
#include <vector>
#include "CloudMachinesManager.h"
#include "SchedCommon.h"

class DaemonController {
public:
	// 初始化连接,指定socket
	DaemonController(int socket);
	// 结束链接，释放资源
	~DaemonController();
	// 等待连接,成功返回1,不成功返回0
	int acceptConnection();
	// 获取可执行文件,存放在文件系统中,并保存路径
	int getApp();
	// 获取输入文件,存放在文件系统中
	int getInput();
	int getSched();
	void setSched();
	// 获取参数
	int getPara();
	// 从cloud中获取节点
	void getNodes();
	// 开始程序
	void startTask();
	// 释放节点资源
	void freeNodes();
	// 上传结果
	int uploadResults();
	void cleanMess();
private:
	void getRequest(char *buf);
	void reply(const char *buf);
	std::string generatePath(const char *prefix, const char *name);
	int recvData(char *buf, int data_len);
	// 与用户的连接
	int tcpSocket;
	std::string mpiFilePath;
	std::string appPath;
	std::string inputPath;
	std::string schedPath;
	double CGRatio;
	int minNodes;
	std::map<int, struct Machine> nodes;
	std::vector<struct keyValue> schedInfo;
	static CloudMachinesManager cloud;
};

#endif
